<?php
class DbfMysql{

	var $Dbf;
	var $mensajeError= '';

	function DbfMySql($pArchivo){
		global $objClases;
		include_once ($objClases->get('ruta_absoluta'). 'includes/Dbf.php');
		$this->Dbf = new Dbf($pArchivo);
	}

	/**
	 * Mueve datos de una tabla DBF a una SQL.
	 * Regresa:
	 *   0 - Si no pudo hacer conexion con base de datos MySQL
	 *   1 - Si no encontro el archivo DBF o un arreglo donde la posicion 0 contiene el numero de datos que se insertaron y la posicion 1 los datos repetidos
	 * @param Array $pCamposDBF Campos que se van a obtener de la tabla DBF
	 * @param Array $pCamposMySQL Campos que se llenaran de la tabla SQL
	 * @param String $pTabla Tabla SQL a modificar
	 */
	function downloadFromDBFtoMySQL($pCamposDBF,$pCamposMySQL,$pTabla, $pCamposDefecto = null){
		//El objeto de base de datos
		global $basedatos;
		//Arreglo de retorno
		$arrayret['insertados']=0;
		$arrayret['repetidos']=0;

		if(sizeof($pCamposDBF) != sizeof($pCamposMySQL)) return false;
		
		$vcampos='';
		//saca los datos de la tabla DBF
		$datos=$this->Dbf->getDatos($pCamposDBF);
		
		// si contiene datos, estan dentro de un arreglo bidimencional
		if($datos != 0){
			//une los campos en una cadena para hacer una consulta
			for($i=0;$i<count($pCamposMySQL);$i++){
				if($i==0)
					$vcampos = $pCamposMySQL[$i];
				else
					$vcampos .= ',' . $pCamposMySQL[$i];
			}
			//Agregamos los valores por defecto
			if($pCamposDefecto != null){
				for($def=0; $def < sizeof($pCamposDefecto); $def++){
					//FIXME Sin campos en $pCamposDBF?
					$nombreCampo = $pCamposDefecto[$def][0];
					$vcampos .= ',' . $nombreCampo;
				}
			}
			//Consulta a la base de datos
			$basedatos->consultaPrefijo('SELECT '.$vcampos.' FROM ' .$pTabla);
			$vdatosMySQL = $basedatos->getResultado('',0,'array');
			if(!is_array($vdatosMySQL)){
				$this->mensajeError = $basedatos->getMensajeError();
				return 0;
			}
			
			$valoresMysql = '';
			//Registros en archivo dbf
			for($dn=0; $dn < sizeof($datos); $dn++){
				$repetidos = 0;
				//Insertar registro a mysql
				$vdatosinser = '';
				for($cn=0; $cn < sizeof($datos[$dn]); $cn++){
					$dato = $datos[$dn][$pCamposDBF[$cn]];
					//FIXME No debe haber funcionamiento exclusivo, pasar de manera generica
					if($pCamposDBF[$cn] == 'ALU_NIN' || $pCamposDBF[$cn] == 'CAT_NOM') $dato = substr($dato,0,30);
					if($pCamposDBF[$cn] == 'ALU_CTR' || $pCamposDBF[$cn] == 'CAT_CVE' || $pCamposDBF[$cn] == 'LIS_CTR') $dato = intval($dato);
					
					if(!is_numeric($dato))	$dato = str_replace("'"," ",$dato);
					$dato = "'$dato'";
					if($cn == 0)
						$vdatosinser = $dato;
					else
						$vdatosinser .= ',' . $dato;
				}
				//Agregamos los valores por defecto
				if($pCamposDefecto != null){
					for($def=0; $def < sizeof($pCamposDefecto); $def++){
						//FIXME Sin campos en $pCamposDBF?
						$valorCampo = $pCamposDefecto[$def][1];
						$vdatosinser .= ',' . "'$valorCampo'";
					}	
				}
				/* ///Una sola consulta
				if($valoresMysql == '')
					$valoresMysql = '( ' . $vdatosinser . ' )';
				else
					$valoresMysql .= ', ( ' . $vdatosinser . " )\n";
				*/
				$sql = 'INSERT INTO '.$pTabla.'('.$vcampos.') VALUES ('. $vdatosinser .')';
				$resultado = $basedatos->consultaPrefijo($sql);
				if(!$resultado)
					if($basedatos->getNumeroError() == 1062)//Duplicado
						$arrayret['repetidos']++;
					else{
						$this->mensajeError = $basedatos->getMensajeError();
						return 0;	
					}
					//die('<script>alert("'.$basedatos->stderr(true).'");</script>');
				else
					$arrayret['insertados']++;
			}
			/* ////Una sola consultaCampos por defecto
			if($pCamposDefecto != null){
				for($def=0; $def < sizeof($pCamposDefecto); $def++){
					$nombreCampo = $pCamposDefecto[$def][0];
					//FIXME Sin campos en $pCamposDBF?
					$vcampos .= ',' . $nombreCampo;
				}
			}
			//Agregar a MySql
			$sql = 'INSERT INTO '.$pTabla.'('.$vcampos.') values '. $valoresMysql.';';
			$resultado = $basedatos->consultaPrefijo($sql);
			if(!$resultado)
				die($basedatos->stderr(true));
				//return array(0,0); */
			return $arrayret;
		}
		$this->mensajeError = __('El archivo DBF no tiene informacion');
		return 0;
	}
	
	function getError(){
		return $this->mensajeError;
	}
}
?>